#ifndef _AUTO_DELETER_H_
#define _AUTO_DELETER_H_
 
/**
  \file AutoRelease.h

  \brief �Զ��ռ��ͷ���,�ɱ��⶯̬����Ŀռ��ڶദreturnʱ����ĳ��
         δ�����ͷ���ɵĴ���
  \version  1.0
 */


    typedef enum
    {
        AUTORELEASE_ARR,   
        AUTORELEASE_OBJ,
    }AUTORELEASE_TYPE;

    template <class Type, const AUTORELEASE_TYPE autoType >
    class AutoRelease
    {
    public:

        AutoRelease()
        {
        }

        ~AutoRelease()
        {
            if ( autoType == AUTORELEASE_ARR ) 
            {
                delete[] m_elem;
                // m_elem = NULL;
            }
            else if ( autoType == AUTORELEASE_OBJ ) 
            {
                delete m_elem;
                // m_elem = NULL;
            }
        }

        AutoRelease( Type &elem) : m_elem(elem)
        {
        }

    private:
        const Type &m_elem;
    };

//  example:
//    Test *p = new Test();
//    AutoRelease<Test *,AUTORELEASE_OBJ> autoRelease(p);
 
#endif